Zdrojový kód pro MAPLE
Výsledkem bude Projektivní prostor dimenze dvě.
Použité knihovny:
Načíst knihovny:
>
with(plots):
>
readlib(spline):
Konstanty a parametry rozměru obrázku:
Poloměr koule
>
R:= 1:
Poloměr trubek pro tubeplot
>
Radius:= R/20:
Počet obrázků v animaci
>
Sekvenci:=45:
Časový průběh - nastaveno tak, že na konci běží čas pomaleji
>
Cas:=t-> sin(Pi/2*t):
Obarvení křivek - x=0..1
>
Color:=(x,y) -> 0.47+0.3*x:
Barva koule
>
Color_koule:= 0.5:
Pomocné funkce:
>
bod:= (r, alfa)-> [r*cos(alfa), r*sin(alfa), 0]:
>
id:= (X, t)-> X:
>
slunce:= (X, t)-> [X[1]*cos(t*Pi), 0, X[1]*sin(t*Pi)]:
>
rotace:= (X, t)-> [0, X[2]*cos(t*Pi), X[2]*sin(t*Pi)]:
>
stredem:=(X, t)-> [(1-t)*X[1], (1-t)*X[2], (1-t)*X[3]]:
>
Krat:= (a, b)-> [a*b[1], a*b[2], a*b[3]]:
>
Zoom:=r-> 2*sin(Pi/2*r):
Trajektorie šesti záchytných bodů:
>
SA:=bod(R, 5/6*Pi):
>
A:=t-> Krat(Zoom(t), id(SA, t)):
>
SB:=bod(R, 7/6*Pi):
>
B:=t-> Krat(Zoom(t), id(SB, t)):
>
SE:=bod(R, 3/6*Pi):
>
E:=t-> Krat(Zoom(t), stredem(SE, t)):
>
SF:=bod(R, 9/6*Pi):
>
F:=t-> Krat(Zoom(t), stredem(SF, t)):
>
SK:=bod(R, 1/6*Pi):
>
K:=t-> Krat(Zoom(t), slunce(SK, t)+ rotace(SK, t)):
>
L:=t-> Krat(Zoom(t), slunce(SK, t)- rotace(SK, t)):
Vyseparvat x-ové, y-ové a z-ové souřadnice trajektorií bodů:
>
SX:=[seq(i, i=1..13)]:
>
SYQ:=t-> A(t), E(t), K(t), L(t), F(t), B(t):
>
SY :=t-> [SYQ(t), SYQ(t), A(t)]:
>
SYx:=t-> [seq(SY(t)[i][1], i=1..13)]:
>
SYy:=t-> [seq(SY(t)[i][2], i=1..13)]:
>
SYz:=t-> [seq(SY(t)[i][3], i=1..13)]:
Propojit záchytné body splinem v každém čase a souřadnici:
>
RPx:=(x,t)-> spline(SX, SYx(t), x, cubic):
>
RPy:=(x,t)-> spline(SX, SYy(t), x, cubic):
>
RPz:=(x,t)-> spline(SX, SYz(t), x, cubic):
Projektivní prostor - parametrizace R^2 do R^4:
>
RP:= (x,t)-> [RPx(x,t), RPy(x,t), RPz(x,t)]:
Vlastní počítací proces:
>
RPcom:=unapply(RP(x,t), x, t):
Zobrazit Projektivní prostor:
Projektivní prostor v E^4 - výsledek:
>
ColorRP:=(x,y) -> Color((x-4)/6, y):
>
RPIm:=i->tubeplot(RPcom(x, Cas(i/Sekvenci)), x=4..10, radius=Radius, color=ColorRP):
>
ProjPr:=seq(RPIm(i), i=0..Sekvenci):
>
Image1:=display([ProjPr], insequence=true):
Projektivní prostor v E^3 - rotující plocha, po které se křivka pohybuje (protíná sama sebe):
>
Rotace:=t-> [t*360, 65+40*sin(Pi*t)^2]:
>
RedKrivka:=tubeplot(RPcom(x, Cas(0.45)), x=4..10, radius=Radius, color=Red):
>
RPplocha:=plot3d(RPcom(x,t), x=4..10, t=0..1, color=Color((x-4)/6, t)):
>
Image2:=seq(display([RPplocha, RedKrivka], orientation=Rotace(i/Sekvenci)), i=0..Sekvenci):
Zobrazit povrch koule ve 4D - vzor zobrazeni:
Obruče:
>
Obruc:=(x,s)-> [x, sqrt(1-x^2)*cos(s)+2, sqrt(1-x^2)*sin(s)]:
>
ColorObruc:=(x,y) -> Color(x/(2*Pi), y):
>
ObrucIm:=t-> tubeplot({Obruc(t, s), Obruc(-t, s+Pi)}, s=0..2*Pi, radius=Radius, color=ColorObruc):
>
Koule:=seq(ObrucIm(1-Cas(i/Sekvenci)), i=0..Sekvenci):
>
Image3:=display([Koule], insequence=true):
Povrch koule ve 3D:
>
Image4:=plot3d([cos(u)*sin(v), sin(u)*sin(v)+2, cos(v)], u=0..2*Pi, v=0..Pi, color=Color_koule, style=WIREFRAME):
Zobrazit konečný výsledek:
4D verze:
>
display([Image1, Image3, Image4], orientation=[-51, 52], scaling=CONSTRAINED);
3D verze:
>
display([Image2], insequence=true, scaling=CONSTRAINED);